<html xmlns="https://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<meta http-equiv="Content-Language" content="zh-CN" />
<link href="../style/css/manual-zip.css" rel="stylesheet" media="all" type="text/css" title="Main stylesheet" />
<link href="../style/css/manual-zip-100pc.css" rel="alternate stylesheet" media="all" type="text/css" title="No Sidebar - Default font size" />
<link href="../style/css/manual-print.css" rel="stylesheet" media="print" type="text/css" />
<title>mod_auth_digest － Apache 2.2 中文手册 [金步国]</title>
<script> var _hmt = _hmt || []; (function() { var hm = document.createElement("script"); hm.src = "https://hm.baidu.com/hm.js?d286c55b63a3c54a1e43d10d4c203e75"; var s = document.getElementsByTagName("script")[0]; s.parentNode.insertBefore(hm, s); })(); </script>
</head>
<body><div id="page-header">
<p class="menu"><a href="index.html">模块索引</a> | <a href="directives.html">指令索引</a> | <a href="../faq/index.html">常见问题</a> | <a href="../glossary.html">词汇表</a> | <a href="../sitemap.html">站点导航</a></p><p class="apache">Apache HTTP Server 版本2.2</p><img alt="" src="../images/feather.gif" /></div>
<div class="up"><a href="index.html"><img title="&lt;-" alt="&lt;-" src="../images/left.gif" /></a></div>
<div id="path"><a href="https://www.apache.org/">Apache</a> &gt; <a href="https://httpd.apache.org/">HTTP Server</a> &gt; <a href="https://httpd.apache.org/docs/">文档</a> &gt; <a href="../index.html">版本2.2</a> &gt; <a href="index.html">模块</a></div>

<div id="translation-info">　　 <a href="../translator_announcement.html#thanks">致谢</a> | 本篇译者：<a href="../../../index.html">金步国</a>(<a href="../../../index.html">作品集</a>) | 本页最后更新：2006年10月20日</div>
<div id="page-content"><div id="preamble"><h1>Apache模块 mod_auth_digest</h1>

<table border="1" cellpadding="0" cellspacing="0" bordercolor="#AAAAAA" class="module">
<tr><th><a href="module-dict.html#Description">说明</a></th><td>使用MD5摘要认证(更安全，但是只有最新的浏览器才支持)</td></tr>
<tr><th><a href="module-dict.html#Status">状态</a></th><td>实验(X)</td></tr>
<tr><th><a href="module-dict.html#ModuleIdentifier">模块名</a></th><td>auth_digest_module</td></tr>
<tr><th><a href="module-dict.html#SourceFile">源文件</a></th><td>mod_auth_digest.c</td></tr>
</table>
<h3>概述</h3>

    <p>这个模块实现了HTTP摘要认证。由于尚未进行过广泛的测试，因此标记为试验模块。</p>
</div>
<div class="top"><a href="mod_auth_digest.html#page-header"><img alt="top" src="../images/up.gif" /></a></div>
<div class="section">
<h2><a name="using" id="using">使用摘要认证</a></h2>

    <p>使用MD5摘要认证很简单。简单的安装认证模块后使用"<code>AuthType Digest</code>"和<code class="directive"><a href="mod_auth_digest.html#authdigestprovider">AuthDigestProvider</a></code>代替普通的"<code>AuthType Basic</code>"和<code class="directive"><a href="mod_auth_basic.html#authbasicprovider">AuthBasicProvider</a></code> ，再添加一个<code class="directive"><a href="mod_auth_digest.html#authdigestdomain">AuthDigestDomain</a></code>指令包含至少是需要保护的区域的根URI。</p>

    <p>可以使用<code class="program"><a href="../programs/htdigest.html">htdigest</a></code>工具来创建和添加(纯文本)用户列表文件。</p>

    <div class="example"><h3>示例：</h3><p><code>
      &lt;Location /private/&gt;<br />
      <span class="indent">
        AuthType Digest<br />
        AuthName "private area"<br />
        AuthDigestDomain /private/ http://mirror.my.dom/private2/<br />
	<br />
	AuthDigestProvider file<br />
        AuthUserFile /web/auth/.digest_pw<br />
        Require valid-user<br />
      </span>
      &lt;/Location&gt;
    </code></p></div>

    <div class="note"><h3>注意</h3>
    <p>摘要认证比基本认证更安全，但是直到2004年9月，只有下列最新版本的主流浏览器支持它：<a href="https://www.w3.org/Amaya/">Amaya</a>, <a href="http://konqueror.kde.org/">Konqueror</a>, <a href="http://www.microsoft.com/windows/ie/">MS Internet Explorer 6</a>(使用查询字符串时会失败，参见"<a href="mod_auth_digest.html#msie">配合 MS Internet Explorer 6 工作</a>"), <a href="http://www.mozilla.org">Mozilla</a>, <a href="http://channels.netscape.com/ns/browsers/download.jsp">Netscape 7</a>, <a href="http://www.opera.com/">Opera</a>, <a href="http://www.apple.com/safari/">Safari</a> 。而<a href="http://lynx.isc.org/">lynx</a><strong>不支持</strong>摘要认证。因为摘要认证尚未得到绝大多数浏览器的支持，你应当只将它应用在你可以控制用户浏览器版本的场合。</p>
    </div>
</div><div class="top"><a href="mod_auth_digest.html#page-header"><img alt="top" src="../images/up.gif" /></a></div>
<div class="section">
<h2><a name="msie" id="msie">配合 MS Internet Explorer 6 工作</a></h2>
    <p>Internet Explorer 6 的摘要认证实现有缺陷，也就是<code>GET</code>请求的查询字符串与RFC规范并不兼容。有几个途径来解决这个问题。</p>

    <p>第一个途径就是使用<code>POST</code>代替<code>GET</code>来向服务器传送数据。如果你的程序不会受到这种变化的影响，这是最简单的方法。</p>

    <p>从2.0.51版本开始，Apache还在环境变量<code>AuthDigestEnableQueryStringHack</code>中提供了一个工作区(workaround)。如果<code>AuthDigestEnableQueryStringHack</code>被打开，Apache将采取措施对付Internet Explorer 6 的bug ，将请求URI从摘要比较中移除。使用这个方法将需要类似如下的配置：</p>

    <div class="example"><h3>在MSIE6中使用摘要认证</h3><p><code>
    BrowserMatch "MSIE" AuthDigestEnableQueryStringHack=On
    </code></p></div>

    <p>参见<code class="directive"><a href="mod_setenvif.html#browsermatch">BrowserMatch</a></code>指令以了解有条件的设置环境变量的更多细节。</p>
</div>
<div class="top"><a href="mod_auth_digest.html#page-header"><img alt="top" src="../images/up.gif" /></a></div>
<div class="directive-section"><h2><a name="AuthDigestAlgorithm" id="AuthDigestAlgorithm">AuthDigestAlgorithm</a> <a name="authdigestalgorithm" id="authdigestalgorithm">指令</a></h2>
<table border="1" cellpadding="0" cellspacing="0" bordercolor="#AAAAAA" class="directive">
<tr><th><a href="directive-dict.html#Description">说明</a></th><td>选择在摘要认证中用于计算请求和应答的散列值的算法</td></tr>
<tr><th><a href="directive-dict.html#Syntax">语法</a></th><td><code>AuthDigestAlgorithm MD5|MD5-sess</code></td></tr>
<tr><th><a href="directive-dict.html#Default">默认值</a></th><td><code>AuthDigestAlgorithm MD5</code></td></tr>
<tr><th><a href="directive-dict.html#Context">作用域</a></th><td>directory, .htaccess</td></tr>
<tr><th><a href="directive-dict.html#Override">覆盖项</a></th><td>AuthConfig</td></tr>
<tr><th><a href="directive-dict.html#Status">状态</a></th><td>实验(X)</td></tr>
<tr><th><a href="directive-dict.html#Module">模块</a></th><td>mod_auth_digest</td></tr>
</table>
    <p><code class="directive">AuthDigestAlgorithm</code>指令选择在摘要认证中用于计算请求和应答的散列值的算法。</p>

    <div class="note"><code>MD5-sess</code>算法当前尚未实现。</div>


</div>
<div class="top"><a href="mod_auth_digest.html#page-header"><img alt="top" src="../images/up.gif" /></a></div>
<div class="directive-section"><h2><a name="AuthDigestDomain" id="AuthDigestDomain">AuthDigestDomain</a> <a name="authdigestdomain" id="authdigestdomain">指令</a></h2>
<table border="1" cellpadding="0" cellspacing="0" bordercolor="#AAAAAA" class="directive">
<tr><th><a href="directive-dict.html#Description">说明</a></th><td>在同一保护区域中需要进行摘要认证的URI</td></tr>
<tr><th><a href="directive-dict.html#Syntax">语法</a></th><td><code>AuthDigestDomain <var>URI</var> [<var>URI</var>] ...</code></td></tr>
<tr><th><a href="directive-dict.html#Context">作用域</a></th><td>directory, .htaccess</td></tr>
<tr><th><a href="directive-dict.html#Override">覆盖项</a></th><td>AuthConfig</td></tr>
<tr><th><a href="directive-dict.html#Status">状态</a></th><td>实验(X)</td></tr>
<tr><th><a href="directive-dict.html#Module">模块</a></th><td>mod_auth_digest</td></tr>
</table>
    <p><code class="directive">AuthDigestDomain</code>指令用于指定一个或者多个在同一保护区域中需要进行摘要认证的URI(也就是使用相同的区域和用户名/密码信息)。这些被指定的URI只是前缀，也就是说客户端将假定所有位于该URI"之下"的URI亦受到相同用户名/密码的保护。这些被指定的URI可以是绝对URI(也就是包含完整的协议、主机、端口等)或者相对URI。</p>

    <p>这个指令<em>必须</em>总是被指定为至少包含被保护页面的根URI。省略这个会导致客户端为<em>每个请求</em>都发送授权头，除了增加请求的字节大小外，如果<code class="directive"><a href="mod_auth_digest.html#authdigestnccheck">AuthDigestNcCheck</a></code>被设为"On"，还会影响服务器的性能。</p>

    <p>这里指定的URI可以分别指向不同的服务器，在这种情况下客户端将会在这些服务器间共享用户名和密码信息，并且不会提醒用户。</p>

</div>
<div class="top"><a href="mod_auth_digest.html#page-header"><img alt="top" src="../images/up.gif" /></a></div>
<div class="directive-section"><h2><a name="AuthDigestNcCheck" id="AuthDigestNcCheck">AuthDigestNcCheck</a> <a name="authdigestnccheck" id="authdigestnccheck">指令</a></h2>
<table border="1" cellpadding="0" cellspacing="0" bordercolor="#AAAAAA" class="directive">
<tr><th><a href="directive-dict.html#Description">说明</a></th><td>Enables or disables checking of the nonce-count sent by the
server</td></tr>
<tr><th><a href="directive-dict.html#Syntax">语法</a></th><td><code>AuthDigestNcCheck On|Off</code></td></tr>
<tr><th><a href="directive-dict.html#Default">默认值</a></th><td><code>AuthDigestNcCheck Off</code></td></tr>
<tr><th><a href="directive-dict.html#Context">作用域</a></th><td>server config</td></tr>
<tr><th><a href="directive-dict.html#Status">状态</a></th><td>实验(X)</td></tr>
<tr><th><a href="directive-dict.html#Module">模块</a></th><td>mod_auth_digest</td></tr>
</table>
    <div class="note">目前尚未实现。</div>


</div>
<div class="top"><a href="mod_auth_digest.html#page-header"><img alt="top" src="../images/up.gif" /></a></div>
<div class="directive-section"><h2><a name="AuthDigestNonceFormat" id="AuthDigestNonceFormat">AuthDigestNonceFormat</a> <a name="authdigestnonceformat" id="authdigestnonceformat">指令</a></h2>
<table border="1" cellpadding="0" cellspacing="0" bordercolor="#AAAAAA" class="directive">
<tr><th><a href="directive-dict.html#Description">说明</a></th><td>Determines how the nonce is generated</td></tr>
<tr><th><a href="directive-dict.html#Syntax">语法</a></th><td><code>AuthDigestNonceFormat <var>format</var></code></td></tr>
<tr><th><a href="directive-dict.html#Context">作用域</a></th><td>directory, .htaccess</td></tr>
<tr><th><a href="directive-dict.html#Override">覆盖项</a></th><td>AuthConfig</td></tr>
<tr><th><a href="directive-dict.html#Status">状态</a></th><td>实验(X)</td></tr>
<tr><th><a href="directive-dict.html#Module">模块</a></th><td>mod_auth_digest</td></tr>
</table>
    <div class="note">目前尚未实现。</div>


</div>
<div class="top"><a href="mod_auth_digest.html#page-header"><img alt="top" src="../images/up.gif" /></a></div>
<div class="directive-section"><h2><a name="AuthDigestNonceLifetime" id="AuthDigestNonceLifetime">AuthDigestNonceLifetime</a> <a name="authdigestnoncelifetime" id="authdigestnoncelifetime">指令</a></h2>
<table border="1" cellpadding="0" cellspacing="0" bordercolor="#AAAAAA" class="directive">
<tr><th><a href="directive-dict.html#Description">说明</a></th><td>服务器nonce(当前值)的有效秒数</td></tr>
<tr><th><a href="directive-dict.html#Syntax">语法</a></th><td><code>AuthDigestNonceLifetime <var>seconds</var></code></td></tr>
<tr><th><a href="directive-dict.html#Default">默认值</a></th><td><code>AuthDigestNonceLifetime 300</code></td></tr>
<tr><th><a href="directive-dict.html#Context">作用域</a></th><td>directory, .htaccess</td></tr>
<tr><th><a href="directive-dict.html#Override">覆盖项</a></th><td>AuthConfig</td></tr>
<tr><th><a href="directive-dict.html#Status">状态</a></th><td>实验(X)</td></tr>
<tr><th><a href="directive-dict.html#Module">模块</a></th><td>mod_auth_digest</td></tr>
</table>
    <p><code class="directive">AuthDigestNonceLifetime</code>指令控制服务器nonce(当前值)的有效秒数。当客户端连接服务器时使用了一个过期的nonce(当前值)，服务器将返回一个带有"<code>stale=true</code>"的401错误(要求重新认证)。如果<var>seconds</var>小于等于"0"，那么nonce(当前值)将永远不会过期(强烈反对这么做)。一般这个值应当在60到600之间比较合理(最好不要小于10)。</p>

</div>
<div class="top"><a href="mod_auth_digest.html#page-header"><img alt="top" src="../images/up.gif" /></a></div>
<div class="directive-section"><h2><a name="AuthDigestProvider" id="AuthDigestProvider">AuthDigestProvider</a> <a name="authdigestprovider" id="authdigestprovider">指令</a></h2>
<table border="1" cellpadding="0" cellspacing="0" bordercolor="#AAAAAA" class="directive">
<tr><th><a href="directive-dict.html#Description">说明</a></th><td>设置该区域的(摘要)认证支持者(Provider)</td></tr>
<tr><th><a href="directive-dict.html#Syntax">语法</a></th><td><code>AuthDigestProvider <var>provider-name</var> [<var>provider-name</var>] ...</code></td></tr>
<tr><th><a href="directive-dict.html#Default">默认值</a></th><td><code>AuthDigestProvider file</code></td></tr>
<tr><th><a href="directive-dict.html#Context">作用域</a></th><td>directory, .htaccess</td></tr>
<tr><th><a href="directive-dict.html#Override">覆盖项</a></th><td>AuthConfig</td></tr>
<tr><th><a href="directive-dict.html#Status">状态</a></th><td>实验(X)</td></tr>
<tr><th><a href="directive-dict.html#Module">模块</a></th><td>mod_auth_digest</td></tr>
</table>
    <p><code class="directive">AuthDigestProvider</code>指令设置了该区域的(摘要)认证支持者(Provider)。默认的<code>file</code>支持者由<code class="module"><a href="mod_authn_file.html">mod_authn_file</a></code>模块实现。必须确保所需的认证支持模块存在于服务器中(静态连接或DSO)。</p>

    <p>能够提供认证支持者(Provider)的模块如下：<code class="module"><a href="mod_authn_dbm.html">mod_authn_dbm</a></code>和<code class="module"><a href="mod_authn_file.html">mod_authn_file</a></code> 。</p>

</div>
<div class="top"><a href="mod_auth_digest.html#page-header"><img alt="top" src="../images/up.gif" /></a></div>
<div class="directive-section"><h2><a name="AuthDigestQop" id="AuthDigestQop">AuthDigestQop</a> <a name="authdigestqop" id="authdigestqop">指令</a></h2>
<table border="1" cellpadding="0" cellspacing="0" bordercolor="#AAAAAA" class="directive">
<tr><th><a href="directive-dict.html#Description">说明</a></th><td>指定摘要认证的保护质量</td></tr>
<tr><th><a href="directive-dict.html#Syntax">语法</a></th><td><code>AuthDigestQop none|auth|auth-int [auth|auth-int]</code></td></tr>
<tr><th><a href="directive-dict.html#Default">默认值</a></th><td><code>AuthDigestQop auth</code></td></tr>
<tr><th><a href="directive-dict.html#Context">作用域</a></th><td>directory, .htaccess</td></tr>
<tr><th><a href="directive-dict.html#Override">覆盖项</a></th><td>AuthConfig</td></tr>
<tr><th><a href="directive-dict.html#Status">状态</a></th><td>实验(X)</td></tr>
<tr><th><a href="directive-dict.html#Module">模块</a></th><td>mod_auth_digest</td></tr>
</table>
    <p><code class="directive">AuthDigestQop</code>指令用于指定使用那个级别的<dfn>保护质量(quality-of-protection)</dfn>。<code>auth</code>将只进行认证(用户名/密码)；<code>auth-int</code>除了认证以外还进行完整性校验(实体的MD5值将被计算和检查)；<code>none</code>将使用旧的RFC-2069摘要算法(不包含完整性检查)；<code>auth</code>和<code>auth-int</code>可以同时指定，在这种情况下，浏览器将会自己选择使用哪种一种。<code>none</code>不推荐使用。</p>

    <div class="note"><code>auth-int</code>目前尚未支持。</div>

</div>
<div class="top"><a href="mod_auth_digest.html#page-header"><img alt="top" src="../images/up.gif" /></a></div>
<div class="directive-section"><h2><a name="AuthDigestShmemSize" id="AuthDigestShmemSize">AuthDigestShmemSize</a> <a name="authdigestshmemsize" id="authdigestshmemsize">指令</a></h2>
<table border="1" cellpadding="0" cellspacing="0" bordercolor="#AAAAAA" class="directive">
<tr><th><a href="directive-dict.html#Description">说明</a></th><td>为了跟踪客户端而分配的共享内存字节数</td></tr>
<tr><th><a href="directive-dict.html#Syntax">语法</a></th><td><code>AuthDigestShmemSize <var>size</var></code></td></tr>
<tr><th><a href="directive-dict.html#Default">默认值</a></th><td><code>AuthDigestShmemSize 1000</code></td></tr>
<tr><th><a href="directive-dict.html#Context">作用域</a></th><td>server config</td></tr>
<tr><th><a href="directive-dict.html#Status">状态</a></th><td>实验(X)</td></tr>
<tr><th><a href="directive-dict.html#Module">模块</a></th><td>mod_auth_digest</td></tr>
</table>
    <p><code class="directive">AuthDigestShmemSize</code>指令指定了服务器启动时为了跟踪客户端而分配的共享内存字节数。注意，这个共享内存段不能设置为小于只跟踪<em>一个</em>客户端所需要的最小内存数量，这个最小数量取决于你的系统。如果你想知道这个最小值，你只要将<code class="directive">AuthDigestShmemSize</code>设为"<code>0</code>"，然后读取重启Apache时返回的错误信息即可(Win和Linux都是每链接需要128字节)。</p>

    <p><var>size</var>通常按照字节计算，但是可以通过加上后缀"<code>K</code>"或"<code>M</code>"来按照KB或MB计算。比如，以下写法都是一样的：</p>

    <div class="example"><p><code>
      AuthDigestShmemSize 1048576<br />
      AuthDigestShmemSize 1024K<br />
      AuthDigestShmemSize 1M
    </code></p></div>

</div>
</div>
<div id="footer">
<p class="apache">本文允许自由的转载、引用、再分发，但必须保留译者署名并注明出处；详见：<a href="../translator_announcement.html#announcement">版权声明</a>。</p>
<p class="menu"><a href="index.html">模块索引</a> | <a href="directives.html">指令索引</a> | <a href="../faq/index.html">常见问题</a> | <a href="../glossary.html">词汇表</a> | <a href="../sitemap.html">站点导航</a></p></div>
</body></html>
